package com.tedu.api.date.ee;

import org.junit.Test;
/**
 * final与finally区别：【考试原题】
 * final 修饰 不可改变类 修饰属性不可改变值【常量】 | 修饰方法 方法不可以重写， 可以重载
 * finally 处理异常块：关闭流
 */

/**
 * 流---传输数据---传输数据过程绝对不能出错【处理手段】
 * 标准流结合异常---标准IO
 *
 *
 * 考试题：throw 与throws区别
 * 异常关键字
 * 异常
 * Java面向对象语言，程序中所出现的所有错误，定义为对象【处理对应错误】
 *
 * Throwable 顶级异常超类
 *
 * Exception异常：描述程序级别的错误---有解决方案
 *               编译器：RunTimeException表示异常
 *                      FileOutputStream创建对象---波浪线---抛出方法之外
 *               检查异常：通常都是编译器检查处理，程序直接报错，抛出
 *               解决方案：①捕获异常(*)
 *                      语法：try(
 *                              怀疑代码可能有异常或者提示异常
 *                              }catch(小异常名字 e){
 *                              e.printStacktrace(); 打印异常信息
 *                              }catch(中异常名字 e){
 *                              e.printStacktrace(); 打印异常信息
 *                              }catch(大异常名字 e){   Exception
 *                              e.printStacktrace(); 打印异常信息
 *                              e.printStacktrace(); 打印异常信息
 *                              }finally{
 *                                  一定执行代码
 *                              }
 *
 *
 *
 *
 *
 *
 *                       ②抛出异常
 *               运行期：控制台直接显示对象【异常对象名字，产生原因】
 *               非检查异常：控制台输出异常对象名称，RunTimeException异常表示类
 *
 *               最后了解【throw
 *
 * Error错误：描述系统级别的错误---出现--程序宕机
 *           非常低-->递归问题
 *
 */
public class EE {
    /**
     * Error 错误----程序严重错误
     * 模拟：方法调方法---栈溢出错误
     * StackOverflowError栈溢出错误
     * ----
     * while(true){
     *     拼接字符对象
     * }
     */
    public static void method(){method();}
    @Test
    public void testError(){EE.method();}

    /**
     * Exception异常：检查异常【出现编译期】---代码报波浪线
     *              两种处理手段：①捕获异常
     *                         ②抛出异常  throws 异常名字
     *             非检查异常【出现运行期】---代码无错误---控制台
     * -------------------------------
     * 异常：File、NotFoundException  文件不存在异常
     * 产生原因：路径写错、文件名写错
     * 异常：NullPointedException  空指针异常
     * 产生原因：获取字符串为u空，数组：值为空，集合：元素为空【存在null值】
     * 异常:StringIndexOutOdBoundsException  字符串下标越界异常
     * 产生原因：字符串下标没有对应的字符
     *
     */
    @Test
    public void testException() {
        //检查异常【出现编译期】---代码报波浪线
        //FileOutputStream fis=new FileOutputStream()
        //非检查异常【出现运行期】---控制台
        try {
            String  str="a";
            str.length();
            str.charAt(1);
            Integer.parseInt(str);  //解析字符串--转换为对应类型
        } catch (StringIndexOutOfBoundsException e){
            e.printStackTrace();
            System.out.println("字符串小异常:下标越界");
        }catch (NumberFormatException e) {
            e.printStackTrace();
            System.out.println("字符串小异常~~");
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("大异常~~~~");
        }finally {
            System.out.println("一定执行代码块");
        }

    }
    /**
     * 作业1:写出：5个【非检查】异常的代码示例
     * 提示：查API---java.lang异常
     *      字符串、包装类、集合、IO流
     */
    @Test
    public void testHomeWork1(){
        //ArrayStoreException
        //ArrayIndexOutOfBoundsException
        //ClassCastException
        //NumberFormatException
        //StringIndexOutOfBoundsExeption

    }



}
